gl renderer: add render ops for dumping the framebuffer
authorTimm Bäder <mail@baedert.org>
Sun, 2 Dec 2018 07:12:09 +0000 (08:12 +0100)
committerTimm Bäder <mail@baedert.org>
Sun, 2 Dec 2018 12:25:43 +0000 (13:25 +0100)
So offscreen rendering can be properly debugged.

gsk/gl/gskglrenderer.c
gsk/gl/gskglrenderops.c
gsk/gl/gskglrenderopsprivate.h

index b7c7ebdc7d2951ed3a0a4b5a62e9dd501997fa94..89be24fadc60b4081d96fb74324b67d4dc239033 100644 (file)
@@ -2562,6 +2562,10 @@ gsk_gl_renderer_render_ops (GskGLRenderer *self,
           glDrawArrays (GL_TRIANGLES, op->draw.vao_offset, op->draw.vao_size);
           break;
 
+        case OP_DUMP_FRAMEBUFFER:
+          dump_framebuffer (op->dump.filename, op->dump.width, op->dump.height);
+          break;
+
         default:
           g_warn_if_reached ();
         }
index 21dbb590293477bd2ac5383a9f0184fd509f8915..c391578567b20cb2a8b8e49280c06f5b1432c808 100644 (file)
@@ -17,6 +17,23 @@ rgba_to_float (const GdkRGBA *c,
   f[3] = c->alpha;
 }
 
+/* Debugging only! */
+void
+ops_dump_framebuffer (RenderOpBuilder *builder,
+                      const char      *filename,
+                      int              width,
+                      int              height)
+{
+  RenderOp op;
+
+  op.op = OP_DUMP_FRAMEBUFFER;
+  op.dump.filename = g_strdup (filename);
+  op.dump.width = width;
+  op.dump.height = height;
+
+  g_array_append_val (builder->render_ops, op);
+}
+
 float
 ops_get_scale (const RenderOpBuilder *builder)
 {
index 97ce3a28b1f41c6c9b183f8bff4135b2eb4d1f76..38b66744e4e1510fda0544f4770b2aa3ab34da96 100644 (file)
@@ -54,6 +54,7 @@ enum {
   OP_CHANGE_UNBLURRED_OUTSET_SHADOW = 19,
   OP_CLEAR                  =  20,
   OP_DRAW                   =  21,
+  OP_DUMP_FRAMEBUFFER       =  22,
 };
 
 typedef struct
@@ -207,6 +208,11 @@ typedef struct
       float progress;
       int source2;
     } cross_fade;
+    struct {
+      char *filename;
+      int width;
+      int height;
+    } dump;
   };
 } RenderOp;
 
@@ -258,6 +264,10 @@ typedef struct
 } RenderOpBuilder;
 
 
+void              ops_dump_framebuffer   (RenderOpBuilder         *builder,
+                                          const char              *filename,
+                                          int                      width,
+                                          int                      height);
 
 void              ops_finish             (RenderOpBuilder         *builder);
 void              ops_push_modelview     (RenderOpBuilder         *builder,